<html>
<head>
<title>Remake de Fruity Frank - Version 0.11</title>
<style type="text/css">
span {
	font-family: 'Courier New';
	font-size: 10pt;
	color: #000000;
}
.SpanClass0 {
	color: #808080;
}
.SpanClass3 {
	color: #008080;
}
.SpanClass5 {
	font-weight: bold;
	color: #0000FF;
}
.SpanClass7 {
	color: #808080;
}
.SpanClass10 {
	font-weight: bold;
	color: #000080;
}
.SpanClass11 {
}
</style>
</head>
<body bgcolor="#FFFFFF">
<h2>Remake (parcial) de Fruity Frank... 11 - Varios enemigos distintos</h2>
<p align="right">(Volver al <a href="doc.html">&iacute;ndice</a>) </p>

<p>Si queremos tener varios enemigos, cada uno de los cuales tenga una posici&oacute;n, una velocidad distinta, etc., una forma sencilla de hacerlo es crear un &quot;array de structs&quot;. El &quot;struct&quot; representar&aacute; los datos que vamos a guardar de cada uno de nuestros enemigos. Por ejemplo:</p>

<pre><code>struct enemigo
{
    int x;       // Posicion horizontal
    int y;       // Posicion vertical
    int ancho;   // Ancho en pixeles
    int incrX;   // Incremento horiz (velocidad)
    int tipo;    // Tipo de enemigo: Pepino, narizotas, etc
    bool activo; // Vivo o muerto?
};</code></pre>

<p>Y el array guardar&aacute; esos datos para una serie de enemigos:</p>

<pre><code>const int NUMENEMIGOS = 5;
enemigo enemigos[NUMENEMIGOS];</code></pre>

<p>Antes prepar&aacute;bamos una serie de datos iniciales para un &uacute;nico enemigo:</p>

<pre><code>    // Posicion inicial y tama&ntilde;o del enemigo
    int xEnemigo1=250, yEnemigo1=250;
    int anchoEnemigo1=40;
    int incrEnemigo=3;</code></pre>

<p>Ahora tendremos que preparar datos iniciales para varios enemigos, as&iacute; que lo podemos hacer de forma repetitiva, con un &quot;for&quot;:</p>

<pre><code>    // Posicion inicial y tama&ntilde;o de los enemigos
    enemigo enemigos[NUMENEMIGOS];
    for (i=0; i&lt;NUMENEMIGOS; i++)
    {
        enemigos[i].x = 250 + i*40;
        enemigos[i].y = 250 + i*30;
        enemigos[i].ancho = 40;
        enemigos[i].incrX = 3;
        if (i&lt;3)
          enemigos[i].tipo = TIPOENEMIGOPEPINO;
        else
          enemigos[i].tipo = TIPOENEMIGONARIZ;
        enemigos[i].activo = true;
    }</code></pre>
    
<p>De igual modo, antes dibuj&aacute;bamos un &uacute;nico enemigo:</p>

<pre><code>   SDLA_dibujarImagenOculta(enemigo1, xEnemigo1, yEnemigo1);</code></pre>
    
<p>y ahora dibujaremos varios, que adem&aacute;s pueden ser de distintos tipos, y estar activos (&quot;vivos&quot;) o no (&quot;muertos&quot;):</p>

<pre><code>        for (i=0; i&lt;NUMENEMIGOS; i++)
        {
          if (enemigos[i].activo)
          {
            if (enemigos[i].tipo == TIPOENEMIGOPEPINO)
              enemigo = enemigoPepino;
            else
              enemigo = enemigoNariz;
            SDLA_dibujarImagenOculta(enemigo, enemigos[i].x,enemigos[i].y);
          }
        }</code></pre>
    
<p>Y tras cada fotograma deberemos mover los enemigos, cada uno de ellos con su propia posici&oacute;n y velocidad (incremento de posici&oacute;n). Antes era as&iacute;</p>

<pre><code>        // Movimiento de enemigo (de momento: lado a lado)
        xEnemigo1 += incrEnemigo;

        if (xEnemigo1 &lt; xIniPantalla) {
          xEnemigo1 = xIniPantalla;
          incrEnemigo = -incrEnemigo;
        }
        if (xEnemigo1 &gt; xFinPantalla-anchoEnemigo1) {
          xEnemigo1 = xFinPantalla-anchoEnemigo1;
          incrEnemigo = -incrEnemigo;
        }</code></pre>
    
<p>Y ahora ser&aacute; parecido, pero repetitivo y accediendo a los campos de cada &quot;struct&quot;, as&iacute;:</p>

<pre><code>        // Movimiento de enemigos (de momento: lado a lado)
        for (i=0; i&lt;NUMENEMIGOS; i++)
        {
            enemigos[i].x  += enemigos[i].incrX;

            if (enemigos[i].x &lt; xIniPantalla) {
              enemigos[i].x = xIniPantalla;
              enemigos[i].incrX = -enemigos[i].incrX;
            }
            if (enemigos[i].x &gt; xFinPantalla-enemigos[i].ancho) {
              enemigos[i].x = xFinPantalla-enemigos[i].ancho;
              enemigos[i].incrX = -enemigos[i].incrX;
            }
        }</code></pre>
    

<p>Como siempre, el resto del proyecto est&aacute; en: <a href="http://code.google.com/p/fruityfrank"> code.google.com/p/fruityfrank</a></p>
<p align="right">(Volver al <a href="doc.html">&iacute;ndice</a>) </p>
</body>
</html>
